home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
t_os
/
bcm332
/
bcm332.bas
next >
Wrap
BASIC Source File
|
1991-10-18
|
11KB
|
295 lines
10000 CLS
10100 LOCATE 10,0:PRINT " Black Tool Series vol.1"
10200 LOCATE 20,1:PRINT "B.キャラメイカーVer3.3L11"
10300 LOCATE 10,2:PRINT " Copyright (c) “H KURODA“ 1991"
10400 LOCATE 10,3:PRINT " Developed by “H KURODA“"
10500 LOCATE 10,5:PRINT " Hit any key":WHILE INKEY$="":WEND
10600 '初期設定
10700 CLS:SCREEN@ 1:CLEAR ,,,600000:DEFINT A-Z:VIEW:WINDOW
10800 DIM CHA(16*3*16*3),UND(16*3*16*3),GE(0),SC(320*240),RAM(16*3*3*16*3*3):R=31:B=31:G=31
10900 LINE (0,0)-(193,193),PSET,7,B
11000 LINE (200,0)-(48+201,48+1),PSET,7,B:PUT@A (201,1)-(248,48),CHA:PUT@A (1,1)-(48,48),CHA,PSET,4,4
11100 '
11200 RESTORE 11200:FOR I=1 TO 4:READ ME$(I):NEXT I:DATA "自由線","直線","塗る","多角形":GOSUB *FREE_SET
11300 LINE (0,200)-(65,225),PSET,3,B
11400 GOTO 13100
11500 *G_SET
11600 LINE (1,201)-(64,208),PSET,4,BF,4:LINE (67,201)-(84,208),PSET,0,BF,0:LINE (G*2+1,201)-(G*2+2,208),PSET,0,BF,0
11700 SYMBOL (67,201),MID$(STR$(G),2),1,.5!,7
11800 RETURN
11900 *R_SET
12000 LINE (1,209)-(64,216),PSET,2,BF,2:LINE (67,209)-(84,216),PSET,0,BF,0:LINE (R*2+1,209)-(R*2+2,216),PSET,0,BF,0
12100 SYMBOL (67,209),MID$(STR$(R),2),1,.5!,7
12200 RETURN
12300 *B_SET
12400 LINE (1,217)-(64,224),PSET,1,BF,1:LINE (67,217)-(84,224),PSET,0,BF,0
12500 SYMBOL (67,217),MID$(STR$(B),2),1,.5!,7:LINE (B*2+1,217)-(B*2+2,224),PSET,0,BF,0
12600 RETURN
12700 *COLOR_SET
12800 LINE (100,200)-(125,225),PSET,7,BF,[(G+1)*8-1,(R+1)*8-1,(B+1)*8-1]
12900 PAL=G*2^10+R*2^5+B
13000 RETURN
13100 GOSUB *G_SET:GOSUB *R_SET:GOSUB *B_SET:GOSUB *COLOR_SET
13200 'マウス設定
13300 MOUSE 0
13400 MOUSE 1,200,200,1:ON MOUSE(2) GOSUB *MAIN:ON MOUSE(4) GOSUB *GET_COLOR:MOUSE(2) ON:MOUSE(4) ON
13500 'その他設定
13600 CONSOLE 0,0,1
13700 KEY 1,"直線":KEY 2,"塗る":KEY 3,"自由線":KEY 4,"戻す":KEY 5,"消す":KEY 6,"保存他":KEY 7,"終了":GOSUB *KEY_SET:GOTO 14800
13800 *KEY_SET
13900 ON KEY(1) GOSUB *LINE_SET
14000 ON KEY(2) GOSUB *PAINT_SET
14100 ON KEY(3) GOSUB *FREE_SET
14200 ON KEY(4) GOSUB *UNDO
14300 ON KEY(5) GOSUB *CLS
14400 ON KEY(6) GOSUB *RAM_MAIN
14500 ON KEY(7) GOSUB *END
14600 FOR I=1 TO 7:KEY(I) ON:NEXT I
14700 RETURN
14800 '
14900 GOTO 14900
15000 *MAIN
15100 GOSUB *MOUSE_ICHI
15200 IF MX>0 AND MX<193 AND MY>0 AND MY<193 THEN *BIG
15300 IF MX>200 AND MX<249 AND MY>0 AND MY<49 THEN *SMALL
15400 IF MX>0 AND MX<65 AND MY>0 AND MY<225 THEN *COLOR
15500 RETURN
15600 *SMALL
15700 GOSUB *KEY_OFF
15800 MX1=MX:MY1=MY
15900 GOSUB *U_GET:ON PAT GOTO 16000,16600,17200
16000 WHILE MOUSE(2,0)=-1:GOSUB *MOUSE_ICHI:IF MX>200 AND MX<249 AND MY>0 AND MY<49 THEN AX=1:GOTO 16100 ELSE 16500
16100 MX2=MX:MY2=MY
16200 LINE (MX1,MY1)-(MX2,MY2),PSET,[(G+1)*8-1,(R+1)*8-1,(B+1)*8-1]:GOSUB *SMALL_GET
16300 MX1=MX2:MY1=MY2
16400 WEND
16500 GOSUB *SMALL_GET:GOSUB *KEY_SET:RETURN
16600 GOSUB *MOUSE_OFF:GOSUB *U_GET:PSET (MX1,MY1),[(G+1)*8-1,(R+1)*8-1,(B+1)*8-1]:WHILE MOUSE(2,0)=-1:WEND
16700 IF MOUSE(2,0)=-1 THEN GOSUB *MOUSE_ICHI:GOTO 16800 ELSE 16700
16800 IF MX>200 AND MX<249 AND MY>0 AND MY<49 THEN 16900 ELSE 16700
16900 LINE (MX1,MY1)-(MX,MY),PSET,[(G+1)*8-1,(R+1)*8-1,(B+1)*8-1]
17000 GOSUB *SMALL_GET:IF MX1=MX AND MY1=MY THEN 17100 ELSE WHILE MOUSE(2,0)=-1:WEND:MX1=MX:MY1=MY:GOTO 16700
17100 GOSUB *MOUSE_ON:GOSUB *KEY_SET:GOSUB *FREE_SET:RETURN
17200 GOSUB *U_GET
17300 PAINT@ (MX1,MY1),[(G+1)*8-1,(R+1)*8-1,(B+1)*8-1]:LINE (200,0)-(249,49),PSET,7,B
17400 GOSUB *SMALL_GET:GOSUB *KEY_SET:GOSUB *MOUSE_ON:RETURN
17500 GOTO 17100
17600 *BIG
17700 GOSUB *KEY_OFF:GOSUB *MOUSE_ICHI:MX1=INT((MX-1)/4):MY1=INT((MY-1)/4)
17800 GOSUB *U_GET:ON PAT GOTO *B_FREE,*B_LINE,*B_PAINT
17900 *B_FREE
18000 MX2=MX1:MY2=MY1:WHILE MOUSE(2,0)=-1
18100 LINE (201+MX1,1+MY1)-(201+MX2,1+MY2),PSET,[(G+1)*8-1,(R+1)*8-1,(B+1)*8-1]
18200 GOSUB *MOUSE_ICHI:MX1=MX2:MY1=MY2:GOSUB *MOUSE_ICHI
18300 IF MX>0 AND MX<193 AND MY>0 AND MY<193 THEN 18400 ELSE 18200
18400 MX2=INT((MX-1)/4):MY2=INT((MY-1)/4):GOSUB *SMALL_GET:WEND
18500 GOSUB *SMALL_GET:GOSUB *KEY_SET
18600 RETURN
18700 *B_LINE
18800 PSET (201+MX1,1+MY1),[(G+1)*8-1,(R+1)*8-1,(B+1)*8-1]
18900 GOSUB *SMALL_GET
19000 IF MOUSE(2,0)=-1 THEN 19000
19100 IF MOUSE(2,0)=0 THEN 19100
19200 GOSUB *MOUSE_ICHI
19300 MX2=INT((MX-1)/4):MY2=INT((MY-1)/4):IF MX2>=0 AND MX2<48 AND MY2>=0 AND MY2<48 THEN 19400 ELSE 19200
19400 LINE (201+MX1,1+MY1)-(201+MX2,1+MY2),PSET,[(G+1)*8-1,(R+1)*8-1,(B+1)*8-1]
19500 GOSUB *SMALL_GET:GOSUB *KEY_SET
19600 IF MX1=MX2 AND MY1=MY2 THEN GOSUB *FREE_SET:RETURN ELSE MX1=MX2:MY1=MY2:GOTO 18900
19700 *B_PAINT
19800 MX1=INT((MX-1)/4):MY1=INT((MY-1)/4)
19900 MX1=201+MX1:MY1=1+MY1:GOTO 17200
20000 *RAM_MAIN
20100 CONSOLE 0,0,1:REC=0:GC=1:GOSUB *KEY_OFF:GOSUB *MOUSE_OFF
20200 CLS:PUT@A (0,0)-(143,143),RAM,PSET,1,1
20300 LINE (250,0)-(299,49),PSET,7,B
20400 PUT@A (251,1)-(298,48),CHA,PSET,1,1:GOTO 20900
20500 LINE (250,50)-(265,65),PSET,7,B:LINE (251,51)-(264,64),XOR,7,BF,7
20600 SYMBOL (250,50),"←",1,1,1
20700 LINE (250,70)-(265,85),PSET,7,B:LINE (251,71)-(264,84),XOR,7,BF,7
20800 SYMBOL (250,70),"→",1,1,1:RETURN
20900 LINE (251,71)-(264,84),PSET,7,BF,7
21000 GOSUB 20500
21100 FOR I=1 TO 6:KEY I,"":NEXT I
21200 KEY 1,"SAVE":KEY 2,"LOAD":KEY 3,"MAIN"
21300 FOR I=1 TO 3:KEY(I) ON:NEXT
21400 ON KEY(1) GOSUB *SAVE
21500 ON KEY(2) GOSUB *LOAD
21600 ON KEY(3) GOSUB *GO_MAIN
21700 MOUSE(2) ON
21800 ON MOUSE(2) GOSUB 22000
21900 IF REC=1 THEN RETURN 10900:ELSE 21900
22000 GOSUB *MOUSE_ICHI
22100 IF MX>=0 AND MX<=143 AND MY>=0 AND MY<=143 THEN 22500
22200 IF MX>=250 AND MX<=265 AND MY>=50 AND MY<=65 AND GC=2 THEN GC=1:GOSUB 20500:RETURN
22300 IF MX>=250 AND MX<=265 AND MY>=70 AND MY<=85 AND GC=1 THEN GC=2:GOSUB 20500:RETURN
22400 RETURN
22500 MX=INT(MX/48):MY=INT(MY/48)
22600 MX=MX*48:MY=MY*48
22700 IF GC=1 THEN 22800 ELSE 23100
22800 PUT@A (MX,MY)-(MX+47,MY+47),CHA,PSET,1,1
22900 GET@A (0,0)-(143,143),RAM
23000 RETURN
23100 GET@A (MX,MY)-(MX+47,MY+47),CHA
23200 PUT@A (251,1)-(298,48),CHA,PSET,1,1
23300 RETURN
23400 *SAVE
23500 GOSUB *MOUSE_OFF:GOSUB *KEY_OFF:GET@A (0,0)-(143,143),RAM
23600 CLS
23700 CONSOLE 0,0,0
23800 PRINT "1:シーケンシャル形式"
23900 PRINT "2:F-BASIC形式"
24000 PRINT "3:臨時保存"
24100 PRINT "0:中止"
24200 WAIT 10
24300 K$=INKEY$
24400 IF K$="1" THEN *S_SAVE
24500 IF K$="2" THEN *F_SAVE
24600 IF K$="0" THEN RETURN 20000
24700 IF K$="3" THEN *L_SAVE
24800 GOTO 24300
24900 *S_SAVE
25000 KAK$=".DAT":FC=0:GOSUB *FILES
25100 IF OK=0 THEN RETURN 20000
25200 CLS:PUT@A (0,0)-(143,143),RAM
25300 DIM SA(16*3*16*3):OPEN "O",#1,NA$:FOR Y=0 TO 2
25400 FOR X=0 TO 2
25500 GET@A (X*16*3,Y*16*3)-(X*16*3+16*3-1,Y*16*3+16*3-1),SA
25600 FOR I=0 TO 2303 STEP 8
25700 PRINT#1,"&H"+HEX$(SA(I))+",&H"+HEX$(SA(I+1))+",&H"+HEX$(SA(I+2))+",&H"+HEX$(SA(I+3))+",&H"+HEX$(SA(I+4))+",&H"+HEX$(SA(I+5))+",&H"+HEX$(SA(I+6))+",&H"+HEX$(SA(I+7))
25800 NEXT I:LINE (X*16*3,Y*16*3)-(X*16*3+16*3-1,Y*16*3+16*3-1),PSET,7,BF,1
25900 NEXT X
26000 NEXT Y
26100 ERASE SA:CLOSE #1
26200 RETURN 20000
26300 *F_SAVE
26400 KAK$=".BAS":FC=0:GOSUB *FILES
26500 IF OK=0 THEN RETURN 20000
26600 CLS:PUT@A (0,0)-(143,143),RAM
26700 DIM SA(16*3*16*3):LIS&=29990:OPEN "O",#1,NA$:CC=-1:GOSUB *LIST:PRINT#1,LIS$+"B.キャラクター・メイカー V3.3L10m"
26800 FOR Y=0 TO 2:FOR X=0 TO 2:CC=CC+1:GOSUB *LIST:GET@A (X*16*3,Y*16*3)-(X*16*3+16*3-1,Y*16*3+16*3-1),SA
26900 PRINT#1,LIS$+"'B.キャラ3.3("+MID$(STR$(CC),2)+")"
27000 FOR I=0 TO 2303 STEP 8
27100 GOSUB *LIST
27200 GOSUB *PRINT:PRINT#1,P$
27300 NEXT I:LINE (X*16*3,Y*16*3)-(X*16*3+16*3-1,Y*16*3+16*3-1),PSET,7,BF,1
27400 NEXT X:NEXT Y
27500 ERASE SA:CLOSE #1
27600 RETURN 20000
27700 *LOAD
27800 GOSUB *MOUSE_OFF:GOSUB *KEY_OFF:GET@A (0,0)-(143,143),RAM
27900 CLS:FC=1:KAK$=".DAT":GOSUB *FILES
28000 CLS:DIM SA(144*144-1):LOAD@ NA$,SA
28100 PUT@A (0,0)-(143,143),SA:BEEP
28200 ERASE SA:GET@A (0,0)-(143,143),RAM
28300 RETURN 20000
28400 *UNDO
28500 PUT@A (201,1)-(248,48),UND,PSET,1,1:PUT@A (1,1)-(48,48),UND,PSET,4,4
28600 GET@A (201,1)-(248,48),CHA
28700 RETURN
28800 *LINE_SET PAT=2:GOTO *SYM_MENU
28900 *PAINT_SET PAT=3:GOTO *SYM_MENU
29000 *FREE_SET PAT=1:GOTO *SYM_MENU
29100 *MOUSE_ICHI
29200 MX=MOUSE(0):MY=MOUSE(1)
29300 RETURN
29400 *CLS
29500 GET@A (201,1)-(248,48),UND
29600 LINE (201,1)-(248,48),PSET,0,BF,0
29700 GET@A (201,1)-(248,48),CHA:PUT@A (1,1)-(48,48),CHA,PSET,4,4
29800 RETURN
29900 *KEY_OFF
30000 FOR I=1 TO 8
30100 KEY(I) OFF
30200 NEXT I
30300 RETURN
30400 *MOUSE_OFF
30500 MOUSE(2) OFF
30600 MOUSE(4) OFF
30700 RETURN
30800 *MOUSE_ON
30900 MOUSE(2) ON
31000 MOUSE(4) ON
31100 RETURN
31200 *COLOR
31300 GOSUB *MOUSE_OFF
31400 C=MX-1:C=INT(C/2)
31500 IF MY>=201 AND MY<=208 THEN G=C
31600 IF MY>=209 AND MY<=216 THEN R=C
31700 IF MY>=217 AND MY<=224 THEN B=C
31800 FOR I=1 TO 4
31900 ON I GOSUB *G_SET,*R_SET,*B_SET,*COLOR_SET
32000 NEXT I
32100 GOSUB *MOUSE_ON
32200 RETURN
32300 *RET
32400 RETURN
32500 *U_GET
32600 GET@A (201,1)-(248,48),UND
32700 RETURN
32800 *SMALL_GET
32900 GET@A (201,1)-(248,48),CHA
33000 PUT@A (1,1)-(48,48),CHA,PSET,4,4
33100 RETURN
33200 *GET_COLOR
33300 GOSUB *MOUSE_ICHI
33400 GET@A (MX,MY)-(MX,MY),GE
33500 GE=GE(0) AND &H7FFF
33600 B=GE AND 31:GE=GE\32:R=GE AND 31:GE=GE\32:G=GE AND 31
33700 FOR I=1 TO 3:ON I GOSUB *R_SET,*G_SET,*B_SET:NEXT I
33800 GOSUB *COLOR_SET
33900 RETURN
34000 *SYM_MENU
34100 LINE (135,200)-(200,239),PSET,0,BF,0
34200 SYMBOL (135,200),ME$(PAT),1,1,7
34300 RETURN
34400 *GO_MAIN
34500 CLS
34600 REC=1:RETURN
34700 *FILES
34800 CLS
34900 PRINT "半角でファイル名を入力して下さい(拡張子はいりません)"
35000 INPUT "",NA$:IF NA$="" THEN RETURN 20000
35100 NA$=LEFT$(NA$,8):NA$="A:"+NA$+KAK$
35200 ON ERROR GOTO *FER_1:OPEN "I",#1,NA$:CLOSE #1
35300 ON ERROR GOTO 0:COLOR 7,0:IF FC=0 THEN KILL NA$
35400 OK=1:RETURN
35500 *FER_1
35600 COLOR 7,0:RESUME 35700
35700 COLOR 7,0:
35800 OK=1:IF FC=0 THEN RETURN
35900 CLS
36000 PRINT "ファイルがありません HIT ANY KEY"
36100 WHILE INKEY$="":WEND:RETURN 20000
36200 *LIST
36300 LIS&=LIS&+10:LIS$=MID$(STR$(LIS&),2)+" ":
36400 RETURN
36500 *PRINT
36600 DIM SA$(7):FOR N=0 TO 7
36700 FOR N=0 TO 7
36800 SA$=HEX$(SA(I+N)):L=LEN(SA$):ON L GOTO 36900,37000,37100,37200
36900 SA$="&H000"+SA$:GOTO 37300
37000 SA$="&H00"+SA$:GOTO 37300
37100 SA$="&H0"+SA$:GOTO 37300
37200 SA$="&H"+SA$:GOTO 37300
37300 SA$(N)=SA$
37400 NEXT N
37500 P$=LIS$+"DATA "
37600 FOR N=0 TO 6
37700 P$=P$+SA$(N)+","
37800 NEXT N
37900 P$=P$+SA$(7)
38000 ERASE SA$:RETURN
38100 *END
38200 DIM ENDDATA(320*240):GET@A (0,0)-(319,239),ENDDATA
38210 CLS:PRINT "終了していいですか?"
38220 YN$=INKEY$:IF YN$="Y" OR YN$="y" THEN CLS:END ELSE IF YN$="N" OR YN$="n" THEN 38230 ELSE 38220
38230 PUT@A (0,0)-(319,239),ENDDATA
38240 ERASE ENDDATA:RETURN
38400 *L_SAVE
38500 DIM L_SAVE(144*144-1):PUT@A (0,0)-(143,143),RAM
38600 GET@A (0,0)-(143,143),L_SAVE
38700 KAK$=".DAT":FC=0:GOSUB *FILES
38800 SAVE@ NA$,L_SAVE
38900 ERASE L_SAVE
39000 RETURN 20000